#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
主窗口模块
包含应用程序的主要界面布局和功能
"""

import sys
from PyQt5.QtWidgets import (QMainWindow, QApplication, QWidget, QVBoxLayout,
                            QHBoxLayout, QMenuBar, QMenu, QAction, QFileDialog,
                            QMessageBox, QDockWidget, QLabel, QPushButton)
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtGui import QIcon
from .control_panel import ControlPanel
from .visualization_panel import VisualizationPanel
from Listener.event_listener import EventListener

class MainWindow(QMainWindow):
    """主窗口类，继承自QMainWindow"""
    
    def __init__(self):
        """初始化主窗口"""
        super().__init__()
        
        # 设置窗口基本属性
        self.setWindowTitle("过程挖掘分析工具")
        self.setMinimumSize(1200, 800)
        
        # 初始化UI组件
        self._init_ui()
        
        # 设置中心部件
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)
        self.main_layout = QHBoxLayout(self.central_widget)
        
        # 创建控制面板和可视化面板
        self.control_panel = ControlPanel()
        self.visualization_panel = VisualizationPanel()
        
        # 添加面板到主布局
        self.main_layout.addWidget(self.control_panel)
        self.main_layout.addWidget(self.visualization_panel)
        
        # 设置布局比例
        self.main_layout.setStretch(0, 1)  # 控制面板占比
        self.main_layout.setStretch(1, 2)  # 可视化面板占比
        
        # 初始化导入和导出方法（这些方法将由事件监听器设置）
        self._import_log = None
        self._export_result = None
        
        # 创建菜单栏和状态栏
        self._create_menu_bar()
        self._create_status_bar()
        
        # 初始化事件监听器
        self.event_listener = EventListener(self)
        
        # 初始状态设置
        self.control_panel.setEnabled(False)  # 禁用控制面板，直到导入日志
        
        print("主窗口初始化完成")  # 调试信息
    
    def _init_ui(self):
        """初始化UI组件"""
        # 设置应用样式
        self.setStyleSheet("""
            QMainWindow {
                background-color: #f5f5f5;
            }
            QMenuBar {
                background-color: #2c3e50;
                color: white;
                padding: 5px;
            }
            QMenuBar::item:selected {
                background-color: #34495e;
            }
            QStatusBar {
                background-color: #2c3e50;
                color: white;
            }
        """)
    
    def _create_menu_bar(self):
        """创建菜单栏"""
        print("开始创建菜单栏")  # 调试信息
        menubar = self.menuBar()
        
        # 文件菜单
        file_menu = menubar.addMenu('文件')
        
        # 导入日志动作
        self.import_action = QAction('导入日志', self)
        self.import_action.setShortcut('Ctrl+O')
        file_menu.addAction(self.import_action)
        
        # 导出结果动作
        self.export_action = QAction('导出结果', self)
        self.export_action.setShortcut('Ctrl+S')
        file_menu.addAction(self.export_action)
        
        file_menu.addSeparator()
        
        # 退出动作
        exit_action = QAction('退出', self)
        exit_action.setShortcut('Ctrl+Q')
        exit_action.triggered.connect(self.close)
        file_menu.addAction(exit_action)
        
        # 算法菜单
        algorithm_menu = menubar.addMenu('算法')
        
        alpha_action = QAction('α算法', self)
        alpha_action.setCheckable(True)
        algorithm_menu.addAction(alpha_action)
        
        heuristic_action = QAction('Heuristic Miner', self)
        heuristic_action.setCheckable(True)
        algorithm_menu.addAction(heuristic_action)
        
        # 帮助菜单
        help_menu = menubar.addMenu('帮助')
        
        about_action = QAction('关于', self)
        about_action.triggered.connect(self._show_about)
        help_menu.addAction(about_action)
        
        print("菜单栏创建完成")  # 调试信息
    
    def _create_status_bar(self):
        """创建状态栏"""
        self.statusBar().showMessage('就绪')
    
    def get_open_file_name(self, title, directory, filter):
        """获取打开文件名
        
        Args:
            title: 对话框标题
            directory: 初始目录
            filter: 文件过滤器
            
        Returns:
            tuple: (文件路径, 选择的过滤器)
        """
        return QFileDialog.getOpenFileName(self, title, directory, filter)
    
    def get_save_file_name(self, title, directory, filter):
        """获取保存文件名
        
        Args:
            title: 对话框标题
            directory: 初始目录
            filter: 文件过滤器
            
        Returns:
            tuple: (文件路径, 选择的过滤器)
        """
        return QFileDialog.getSaveFileName(self, title, directory, filter)
    
    def show_error(self, message):
        """显示错误消息
        
        Args:
            message: 错误信息
        """
        QMessageBox.critical(self, "错误", message)
    
    def _show_about(self):
        """显示关于对话框"""
        QMessageBox.about(
            self,
            "关于",
            "过程挖掘分析工具 v1.0\n\n"
            "基于PM4Py的过程挖掘分析软件\n"
            "支持多种挖掘算法和可视化功能"
        )
    
    def closeEvent(self, event):
        """窗口关闭事件处理
        
        Args:
            event: 关闭事件对象
        """
        # 清理资源
        self.event_listener.cleanup()
        event.accept() 